package com.blueocean_health.care.management.mapper;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.ibatis.annotations.Param;

import com.blueocean_health.care.management.domain.base.UserTeam;
import com.blueocean_health.care.management.domain.dto.RoleAuthDto;
import com.blueocean_health.care.management.util.MyMapper;

public interface UserTeamMapper extends MyMapper<UserTeam> {
	
	/**
	 * 查找角色，组织/项目关联的所有用户
	 * @param roleAuthDto
	 * @return
	 */
	List<UserTeam> findUserByRoleIdAndStatus(@Param("roleId")Integer roleId, @Param("status")String status);


	/**
	 * 批量添加用户和组织关系
	 * @param roleAuthDto
	 * @param removeUserRoleSet
	 * @return
	 */
	int insertUserTeamBase(@Param("roleAuthDto")RoleAuthDto roleAuthDto, @Param("addUserRoleSet")Set<String> addUserRoleSet);

	/**
	 * 批量删除用户和组织关系
	 * @param roleAuthDto
	 * @param removeUserRoleSet
	 * @return
	 */
	int deleteUserTeamByRoleSet(@Param("roleAuthDto")RoleAuthDto roleAuthDto, @Param("removeUserRoleSet")Set<String> removeUserRoleSet);

	/**
	 * 通过项目/组织id查询通用角色(负责人/项目经理)对应的用户
	 * @param orgOrPeojectId 	组织/项目id
	 * @param type   	1：负责人  2：项目经理
	 * @return
	 */
	UserTeam selectOrgOrProjectManagerByTeamId(Map<String, Object> paramsMap);

	/**
	 * 删除用户和组织间的关系
	 * @param projectVo
	 * @param roleId
	 * @param removeUserId 
	 */
	int deleteUserTeamByTeamIdAndStatusAndRoleId(Map<String, Object> paramsMap);

	/**
	 * 更新项目经理角色对应项目项目经理状态
	 * @param id
	 * @param status
	 * @return
	 */
	int updateUserTeamStatusById(@Param("id")Integer id, @Param("status")Integer status);

	/**
	 * 查询启用/禁用组织/项目在角色负责人/项目经理中的用户
	 * @param code
	 * @param status
	 * @return
	 */
	List<UserTeam> selectByTeamIdSetAndRoleId(@Param("code")String code, @Param("status")String status);

	/**
	 * 查询某个用户对应的所有角色(用户模块查看角色)
	 * @param paramsMap
	 * @return
	 */
	List<Map<String, String>> findRoleByUserId(Map<String, Object> paramsMap);
	
	/**
	 * 更新组织和用户的中间表
	 * @param id
	 * @param status
	 * @return
	 */
	int updateUserTeamStatusByRoleId(@Param("id")Integer id, @Param("status")Integer status);
	
	/**
	 * 查询登录选择身份组织/项目列表(登录选择身份列表)
	 * @param paramsMap
	 * @return
	 */
	List<Map<String, String>> findIdentityByUserId(Map<String, Object> paramsMap);
	
	/**
	 * 查询登录选择身份组织/项目列表(登录选择身份列表)
	 * @param paramsMap
	 * @return
	 */
	List<Map<String, String>> findOrgsAndProjectsByUserId(Map<String, Object> paramsMap);
	
	/**
	 * 根据角色id和组织Id查询角色授权用户列表
	 * @param roleAuthDto
	 * @return
	 */
	List<UserTeam> findUserByRoleIdAndOrgId(RoleAuthDto roleAuthDto);

}